﻿class  
{
	public static void main(String[] args) 
	{
		System.out.println("Hello World!");
	}
}
class Fu
{
	private int num = 9;
	public void show1(){}
	public void setNum(int num)
	{
		this.num  = num;
	}
	Fu(){}
}

class Zi extends Fu
{
	//int num = 4;

	void show()
	{
		int num = 7;
		System.out.println(super.num);
	}
}

Zi z = new zi();
z.setNum(4);
继承：
	特点：
		1，提高了代码的复用性。
		2，让类与类之间产生关系，是多态性的前提。

	Java中的继承。
		1，java只支持单继承，不支持多继承。为啥呢？答案：因为继承了多个父类如果有相同方法时，
												子类对象不确定运行哪一个。
		2，Java还支持多层继承。A-->B--->C  原来可以形成继承体系。
			想要使用体系功能，"查阅父类功能，建立子类对象调用功能。"
			注解：父类的由来其实是由事物中的共性内容不断向上抽取而来的。
				所以父类中定义的是该体系中的最基本，最共性功能。
	
	继承出现后，代码上也有一些特点：
	1，变量。
		当子父类中定义了相同的名称的成员变量，
		子类要使用父类中的同名变量时，需要使用关键字super来区分。
		一般不会出现这种情况，因为父类中有了，子类不需要定义。
		而且父类定义时，一般变量都私有化。

	2，函数。
		子类可以直接访问父类中非私有的成员函数。
		特殊情况：当子类中定义了与父类一模一样的方法时，会发生覆盖操作。大多指的是非静态方法。
				  最终会运行子类的方法，父类相当于被覆盖了。
				  函数的另一个特性：覆盖（重写，复写）。
				  什么时候用啊？
				  当父类的功能要被修改时，不建议修改源码。因为是灾难。
				  只要通过一个类继承原有类，定义一个新的升级后的功能即可。
				  但是功能是相同的，只是实现方法改变。这是子类可以沿袭父类中的功能定义，
				  并重写功能内容。这就是覆盖。

				  覆盖很爽，但是有注意事项：
				  1，子类覆盖父类时，必须权限要大于等于父类权限。
				  2，静态不能覆盖非静态。
			
	3，构造函数。
		构造函数可以本类进行对象初始化，也可以给子类对象进行初始化。
		子类对象初始化过程：
		子类中的所有构造方法都会访问父类中空参数的构造函数，
		因为每一个构造函数的第一行，都有一句隐式的super语句。
		为什么要有这条语句？
		因为子类会获取到父类中的数据，必须要先明确父类对数据的初始化过程。

		当父类中没有空参数构造函数时，子类构造函数必须通过super句来明确要访问的父类中指定的构造函数。

		当时子类构造函数也可以通过this语句访问本类中的构造函数。
		但是子类中肯定，至少有一个构造函数会访问父类。

	
抽象类：其实就是在分析事物时，事物中的功能有些是不明确的内容的。这些不明确内容就是抽象的。
		可以通过抽象函数来描述。

		抽象函数一定要定义在抽象类中，因为，抽象函数所在类，也必须被抽象标识。

		写法特点：
		1，抽象函数只对函数进行声明，没有函数主体。
		2，抽象类和抽象函数都需要用abstract修饰。
		3，抽象类不可以进行实例化。
		4，想要使用抽象功能，必须通过子类覆盖了父类中所有的抽象方法后，才可以对子类实例化。
			如果只覆盖了部分抽象方法，那么子类还是一个抽象类。

		也可以理解为：抽象类是一个父类，是不断向上抽取而来的，
		在抽取过程中，只抽取了方法声明，但没有抽取方法实现。

		抽象类和一半类差不多。
		区别：
		抽象类可以定义抽象方法。
		抽象类不可以建立对象。

		其实抽象类一样用于描述事物，既可以定义抽象方法，也可以定义非抽象方法。


	

接口
	 初期理解：接口看上去是一个特殊的抽象类。里面存的都是抽象方法。

	 特点：
	 格式：
		1，通过interface来定义。
		2，接口中常见成员：常量，抽象方法。
			而且这些成员都有固定的修饰符。
			常量：public static final
			方法：public abstract 
		3，接口中的成员都是共有的。
		4，一个类可以对接口进行多实现，也弥补了多继承带来的安全隐患，所以java对多继承进行了改良。
			用多实现方法来体现多继承的特性。
		5，一个类可以继承一个类的同时，实现多个接口。
		6，接口与接口之间是继承关系，而且可以多继承。


	应用特点：
		1，接口是对外暴露的规则。
		2，接口是功能的扩展。
		3，接口的出现降低了耦合性。
		别忘了说的时候，需要举例。如usb。pci，主板。插座。


抽象类和接口异同：
相同：
1，都可以在内部定义抽象方法。
2，通常都在顶层。
3，都不可以实例化，都需要子类来实现。

不同点：
1，抽象类中可以定义抽象方法和非抽象方法，
	而接口中只能定义抽象方法。
2，接口的出现可以多实现。
	抽象类只能单继承。
	也就是说：接口的出现避免了单继承的局限性。
3，继承和实现的关系不一致。继承：is a，实现：like a 





/*		

abstract class Fu
{
	abstract int show();
}

class Zi extends Fu
{
	int show1()
	{
		return 3;
	}
}

class  Fu
{
	void method()
	{
		System.out.println("method run");
	}
}

class Zi extends Fu
{
	void method()
	{
		System.out.println("method zi run");
	}
}




class ArrayTool
{
	public int getMax(int[] arr)
	{}
priavte int age;
	public void setAge()
}

运动员
	|--篮球运动员：
	|--足球运动员：
*/